home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Text⁄Files / Voyeur 1.1.1 / Voyeur ƒ / v code ƒ / v.c < prev    next >
Text File  |  1994-02-27  |  5KB  |  198 lines

  1. /**********************************************************************\
  2.  
  3. File:        v.c
  4.  
  5. Purpose:    This module handles Voyeur initialization and shutdown,
  6.             opening a new file (dispatch routine), and handling clicks
  7.             and keypresses in the main window.
  8.  
  9.  
  10. Voyeur -- a no-frills file viewer
  11. Copyright ©1993-4, Mark Pilgrim
  12.  
  13. This program is free software; you can redistribute it and/or modify
  14. it under the terms of the GNU General Public License as published by
  15. the Free Software Foundation; either version 2 of the License, or
  16. (at your option) any later version.
  17.  
  18. This program is distributed in the hope that it will be useful,
  19. but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21. GNU General Public License for more details.
  22.  
  23. You should have received a copy of the GNU General Public License
  24. along with this program in a file named "GNU General Public License".
  25. If not, write to the Free Software Foundation, 675 Mass Ave,
  26. Cambridge, MA 02139, USA.
  27.  
  28. \**********************************************************************/
  29.  
  30. #include "v.h"
  31. #include "v meat.h"
  32. #include "program globals.h"
  33. #include "v files.h"
  34. #include "v file management.h"
  35. #include "v find.h"
  36. #include "v error.h"
  37. #include "v window maintenance.h"
  38. #include "msg menus.h"
  39. #include "msg graphics.h"
  40. #include "msg environment.h"
  41. #include "util.h"
  42.  
  43. unsigned char    hexchar[2][256];
  44. unsigned char    asciichar[256];
  45.  
  46. void InitProgram(void)
  47. {
  48.     int                i,j,k,count;
  49.     AppFile            myFile;
  50.     
  51.     gWhichFile=0;
  52.     
  53.     for (i=0; i<16; i++)
  54.     {
  55.         for (j=0; j<16; j++)
  56.         {
  57.             hexchar[0][i*16+j]=(i<10) ? i+'0' : i+'A'-10;
  58.             hexchar[1][i*16+j]=(j<10) ? j+'0' : j+'A'-10;
  59.         }
  60.     }
  61.     StuffHex(&asciichar[0],        "\p2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F");
  62.     StuffHex(&asciichar[64],    "\p404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E2E");
  63.     StuffHex(&asciichar[128],    "\p808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF");
  64.     StuffHex(&asciichar[192],    "\pC0C1C2C3C4C5C6C7C8C92ECBCCCDCECFD0D1D2D3D4D5D6D7D8D92E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E");
  65.     
  66.     CountAppFiles(&i, &j);
  67.     if ((j>0) && (i==0))
  68.     {
  69.         for (count=1; count<=j; count++)
  70.         {
  71.             gLastFile=gWhichFile;
  72.             gWhichFile=CountProgramWindows();
  73.             if (gWhichFile==MAX_WINDOWS)
  74.             {
  75.                 HandleError(tooManyFilesErr);
  76.                 for (k=count; k<=j; k++)
  77.                     ClrAppFiles(k);
  78.             }
  79.             else
  80.             {
  81.                 GetAppFiles(count, &myFile);
  82.                 MyMakeFSSpec(myFile.vRefNum, 0, myFile.fName, &gTheFS[gWhichFile]);
  83.                 HandleError(OpenTheEditWindow());
  84.                 ClrAppFiles(count);
  85.             }
  86.         }
  87.     }
  88. }
  89.  
  90. int NewEditWindow(void)
  91. {
  92.     gLastFile=gWhichFile;
  93.     gWhichFile=CountProgramWindows();
  94.     if (gWhichFile==MAX_WINDOWS)
  95.         HandleError(tooManyFilesErr);
  96.     else
  97.     {
  98.         gTheFS[gWhichFile].name[0]=0x00;
  99.         if (GetSourceFile(&gTheFS[gWhichFile]))
  100.             return OpenTheEditWindow();
  101.         else return userCancelErr;
  102.     }
  103. }
  104.  
  105. int OpenTheEditWindow(void)
  106. {
  107.     int                resultCode;
  108.     int                i;
  109.     
  110.     for (i=0; i<CountProgramWindows(); i++)
  111.         if ((i!=gWhichFile) && (gTheFS[gWhichFile].vRefNum==gTheFS[i].vRefNum) &&
  112.             (gTheFS[gWhichFile].parID==gTheFS[i].parID) &&
  113.             (Mymemcompare(gTheFS[gWhichFile].name, gTheFS[i].name, gTheFS[i].name[0]+1)))
  114.         {
  115.             SelectProgramWindow(GetProgramWindowFromIndex(i));
  116.             return allsWell;
  117.         }
  118.     
  119.     gBufferOffset[gWhichFile]=0;
  120.     resultCode=OpenTheFile(&gTheFS[gWhichFile], &gTheRefNum[gWhichFile]);
  121.     if (resultCode!=allsWell)
  122.         return resultCode;
  123.     
  124.     gOffscreenNeedsUpdate[kMainWindow]=TRUE;
  125.     OpenProgramWindow(gWhichFile);
  126.     
  127.     return allsWell;
  128. }
  129.  
  130. void ProgramUndo(void)
  131. {
  132. }
  133.  
  134. void ProgramEvent(void)
  135. {
  136.     Point        mouseLoc;
  137.     Rect        theRect;
  138.     
  139.     if (IsProgramWindow(FrontWindow()))
  140.     {
  141.     }
  142. }
  143.  
  144. void ProgramKeyEvent(char charPressed)
  145. {
  146.     int                i;
  147.     
  148.     if (IsProgramWindow(FrontWindow()))
  149.     {
  150.         ObscureCursor();
  151.         switch (charPressed)
  152.         {
  153.             case 0x1d: /* right arrow */
  154.             case 'N':
  155.             case 'n':
  156.                 GoForward();
  157.                 break;
  158.             case 0x1c: /* left arrow */
  159.             case 'P':
  160.             case 'p':
  161.                 GoBack();
  162.                 break;
  163.             case 'D':
  164.             case 'd':
  165.                 DoDataFork();
  166.                 break;
  167.             case 'R':
  168.             case 'r':
  169.                 DoResourceFork();
  170.                 break;
  171.             case 'B':
  172.             case 'b':
  173.                 GoBeginning();
  174.                 break;
  175.             case 'E':
  176.             case 'e':
  177.                 GoEnd();
  178.                 break;
  179.             case 'F':
  180.                 DoFind(TRUE);
  181.                 break;
  182.             case 'f':
  183.                 DoFind(FALSE);
  184.                 break;
  185.             case 'G':
  186.             case 'g':
  187.                 if (gFindString[0]!=0x00)
  188.                     DoFindAgain();
  189.                 break;
  190.         }
  191.     }
  192. }
  193.  
  194. void ShutDownProgram(void)
  195. {    
  196.     HandleFileMenu(closeAllItem);
  197. }
  198.